﻿using System;
using System.Linq;
using System.Collections.Generic;
using SIM.Geo.DA;
using SIM.Geo.BE;

namespace SIM.Geo.BL
{
    /// <summary>
    /// Clase de la capa de negocio que gestiona tipo apertura
    /// </summary>
    public class BLTipoAbertura
    {
        #region Metodos
        /// <summary>
        /// Metodo que devuelve lista de apertura
        /// </summary>
        /// <returns></returns>
        public List<TipoAbertura> Listar()
        {
            try
            {
                return Accesor.Listar();
            }
            catch(Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Metodo que inserta el tipo apertura
        /// </summary>
        /// <param name="TipoAbertura"></param>
        /// <returns></returns>
        public int Insertar(TipoAbertura tipoAbertura)
        {
            try
            {
                return Accesor.Insertar(tipoAbertura);
            }
            catch(Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Metodo que modifica tipo apertura
        /// </summary>
        /// <param name="TipoAbertura"></param>
        public void Modificar(TipoAbertura tipoAbertura)
        {
            try
            {
                var TipoAberturaEdit = Accesor.Obtener(tipoAbertura.CodigoTipoAbertura);
                TipoAberturaEdit.Descripcion = tipoAbertura.Descripcion;
                Accesor.Modificar(TipoAberturaEdit);
            }
            catch(Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Metodo que elimina tipo apertura
        /// </summary>
        /// <param name="codigoTipoAbertura"></param>
        public void Eliminar(int codigoTipoAbertura)
        {
            try
            {
                var TipoAbertura = Accesor.Obtener(codigoTipoAbertura);
                Accesor.Eliminar(TipoAbertura);
            }
            catch(Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Metodo que busca por nombre de tipo apertura
        /// </summary>
        /// <param name="nombre"></param>
        /// <returns></returns>
        public List<TipoAbertura> Buscar(string nombre)
        {
            try
            {
                return Accesor.Buscar(nombre);
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Metodo que devuelve un tipo apertura por codigo
        /// </summary>
        /// <param name="codigoTipoAbertura"></param>
        /// <returns></returns>
        public TipoAbertura Obtener(int codigoTipoAbertura)
        {
            try
            {
                return Accesor.Obtener(codigoTipoAbertura);
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// Devuelve la lista para ComboBox, DropdownList, devuelve campos Value y Text
        /// </summary>
        /// <returns></returns>
        public List<ListItemInt> ObtenerListItem()
        {

            var result = Accesor.Listar();
            return result
                .Select(x => new ListItemInt { Value = x.CodigoTipoAbertura, Text = x.Descripcion }).ToList();

        }
        #endregion
        #region Accesor
        private static DATipoAbertura Accesor
        {
            [System.Diagnostics.DebuggerStepThrough]
            get { return new DATipoAbertura(); }
        }
        #endregion
    }
}
